Plotly is a cool R package for making interactive graphs. You can display them within R studio, embed them in Shiny apps or Markdown reports, or upload them to Plotly’s web server. Plotly can work with standard ggplot syntax, but can also be used to do cool 3D graphics that ggplot can’t easily do.
library(plotly)
package <U+393C><U+3E31>plotly<U+393C><U+3E32> was built under R version 3.4.3Loading required package: ggplot2
Attaching package: <U+393C><U+3E31>plotly<U+393C><U+3E32>
The following object is masked from <U+393C><U+3E31>package:ggplot2<U+393C><U+3E32>:
last_plot
The following object is masked from <U+393C><U+3E31>package:stats<U+393C><U+3E32>:
filter
The following object is masked from <U+393C><U+3E31>package:graphics<U+393C><U+3E32>:
layout
library(dplyr)
Attaching package: <U+393C><U+3E31>dplyr<U+393C><U+3E32>
The following objects are masked from <U+393C><U+3E31>package:stats<U+393C><U+3E32>:
filter, lag
The following objects are masked from <U+393C><U+3E31>package:base<U+393C><U+3E32>:
intersect, setdiff, setequal, union
library(lidR) # We'll need these for the 3D example.
package <U+393C><U+3E31>lidR<U+393C><U+3E32> was built under R version 3.4.3Loading required package: magrittr
lidR 1.4.1. For help, for the most up-to-date version or to report a bug, visit https://github.com/Jean-Romain/lidR
library(VoxR)
package <U+393C><U+3E31>VoxR<U+393C><U+3E32> was built under R version 3.4.3
Interactive ggplot graphs
First, we’ll create a basic scatter plot with ggplot.
height.sims <- read.csv("C:\\Users\\Jason Karl\\Documents\\GitHub\\REM504-DataScience\\Practice_Datasets\\height_compare_sims.csv", header = T, stringsAsFactors = F)
sc.plot <- ggplot(data=height.sims[height.sims$haf.sum>0,], aes(x=aim.sum,y=haf.sum))+geom_point()+
geom_smooth(method="lm")
sc.plot

Now let’s pass it to plotly
ggplotly(sc.plot)
We recommend that you use the dev version of ggplot2 with `ggplotly()`
Install it with: `devtools::install_github('hadley/ggplot2')`
3D graphs with Plotly
Plotly has some cool features for doing 3D graphics. The structure is a bit different than ggplot, though. Let’s run an example with a test LiDAR dataset of a shrub.
That’s pretty cool. Let’s do some voxel analysis (think Minecraft) of this point cloud by summarizing how many lidar points fall within each voxel.
LS0tDQp0aXRsZTogIkdyYXBoaW5nIHdpdGggUGxvdGx5Ig0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KUGxvdGx5IGlzIGEgY29vbCBSIHBhY2thZ2UgZm9yIG1ha2luZyBpbnRlcmFjdGl2ZSBncmFwaHMuIFlvdSBjYW4gZGlzcGxheSB0aGVtIHdpdGhpbiBSIHN0dWRpbywgZW1iZWQgdGhlbSBpbiBTaGlueSBhcHBzIG9yIE1hcmtkb3duIHJlcG9ydHMsIG9yIHVwbG9hZCB0aGVtIHRvIFBsb3RseSdzIHdlYiBzZXJ2ZXIuIFBsb3RseSBjYW4gd29yayB3aXRoIHN0YW5kYXJkIGdncGxvdCBzeW50YXgsIGJ1dCBjYW4gYWxzbyBiZSB1c2VkIHRvIGRvIGNvb2wgM0QgZ3JhcGhpY3MgdGhhdCBnZ3Bsb3QgY2FuJ3QgZWFzaWx5IGRvLg0KDQpgYGB7cn0NCmxpYnJhcnkocGxvdGx5KQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkobGlkUikgIyBXZSdsbCBuZWVkIHRoZXNlIGZvciB0aGUgM0QgZXhhbXBsZS4NCmxpYnJhcnkoVm94UikNCmBgYA0KIyMgSW50ZXJhY3RpdmUgZ2dwbG90IGdyYXBocw0KDQpGaXJzdCwgd2UnbGwgY3JlYXRlIGEgYmFzaWMgc2NhdHRlciBwbG90IHdpdGggZ2dwbG90Lg0KDQpgYGB7cn0NCmhlaWdodC5zaW1zIDwtIHJlYWQuY3N2KCJDOlxcVXNlcnNcXEphc29uIEthcmxcXERvY3VtZW50c1xcR2l0SHViXFxSRU01MDQtRGF0YVNjaWVuY2VcXFByYWN0aWNlX0RhdGFzZXRzXFxoZWlnaHRfY29tcGFyZV9zaW1zLmNzdiIsIGhlYWRlciA9IFQsIHN0cmluZ3NBc0ZhY3RvcnMgPSBGKQ0Kc2MucGxvdCA8LSBnZ3Bsb3QoZGF0YT1oZWlnaHQuc2ltc1toZWlnaHQuc2ltcyRoYWYuc3VtPjAsXSwgYWVzKHg9YWltLnN1bSx5PWhhZi5zdW0pKStnZW9tX3BvaW50KCkrDQogICAgICAgICAgICBnZW9tX3Ntb290aChtZXRob2Q9ImxtIikNCnNjLnBsb3QNCmBgYA0KTm93IGxldCdzIHBhc3MgaXQgdG8gcGxvdGx5DQoNCmBgYHtyfQ0KZ2dwbG90bHkoc2MucGxvdCkNCmBgYA0KDQoNCiMjIDNEIGdyYXBocyB3aXRoIFBsb3RseQ0KUGxvdGx5IGhhcyBzb21lIGNvb2wgZmVhdHVyZXMgZm9yIGRvaW5nIDNEIGdyYXBoaWNzLiBUaGUgc3RydWN0dXJlIGlzIGEgYml0IGRpZmZlcmVudCB0aGFuIGdncGxvdCwgdGhvdWdoLiBMZXQncyBydW4gYW4gZXhhbXBsZSB3aXRoIGEgdGVzdCBMaURBUiBkYXRhc2V0IG9mIGEgc2hydWIuDQoNCmBgYHtyfQ0KcGMgPC0gcmVhZExBUygiQzpcXFVzZXJzXFxKYXNvbiBLYXJsXFxEb2N1bWVudHNcXEdpdEh1YlxcUkVNNTA0LURhdGFTY2llbmNlXFxQcmFjdGljZV9EYXRhc2V0c1xcdGVzdF9zaHJ1Yi5sYXMiKSAjIExvYWQgdGhlIExpREFSIExBUyBmaWxlLg0KDQojIyBHcmFiIGp1c3QgdGhlIHgsIHksIGFuZCB6IGNvb3JkaW5hdGUgdmFsdWVzIC10aGF0J2EgYWxsIHdlIG5lZWQgaGVyZS4NCnBjLmRmIDwtIHBjQGRhdGFbLGMoIlgiLCJZIiwiWiIpXSANCg0KDQojIyBMZXQncyBzdWJzZXQgdGhlIHBvaW50IGNsb3VkIHNvIHdlIGNhbiB2aXN1YWxpemUgaXQgZWFzaWx5IGluIFINCnBjLnN1YnNldCA8LSBzYW1wbGVfbihwYy5kZiwgMjAwMDAsIHJlcGxhY2U9RikNCg0KIyMgTm93IHVzZSBwbG90bHkgdG8gbWFrZSBhIGdyYXBoDQpxIDwtIHBsb3RfbHkocGMuc3Vic2V0LCB4PX5YLCB5PX5ZLCB6PX5aLCB0eXBlPSJzY2F0dGVyM2QiLCANCiAgICAgICAgICAgICBtb2RlPSJtYXJrZXJzIiwgDQogICAgICAgICAgICAgbWFya2VyPWxpc3QoY29sb3I9IiMzNDM0MzQiLCBzaXplPTEpKSAlPiUgDQogIGFkZF9tYXJrZXJzKCkgJT4lDQogIGxheW91dChzY2VuZT1saXN0KHhheGlzPWxpc3Qoc2hvd3RpY2tsYWJlbHM9RkFMU0UsIHRpdGxlPSJYIiksICAjVHVybiBvZmYgdGhlIGF4aXMgbnVtYmVycyBhbmQgcmVsYWJlbA0KICAgICAgICAgICAgICAgICAgICB5YXhpcz1saXN0KHNob3d0aWNrbGFiZWxzPUZBTFNFLCB0aXRsZT0iWSIpLA0KICAgICAgICAgICAgICAgICAgICB6YXhpcz1saXN0KHNob3d0aWNrbGFiZWxzPUZBTFNFLCB0aXRsZT0iSGVpZ2h0IikpKQ0KcQ0KDQpgYGANCg0KVGhhdCdzIHByZXR0eSBjb29sLiBMZXQncyBkbyBzb21lIHZveGVsIGFuYWx5c2lzICh0aGluayBNaW5lY3JhZnQpIG9mIHRoaXMgcG9pbnQgY2xvdWQgYnkgc3VtbWFyaXppbmcgaG93IG1hbnkgbGlkYXIgcG9pbnRzIGZhbGwgd2l0aGluIGVhY2ggdm94ZWwuDQoNCmBgYHtyfQ0KIyMgUnVuIHRoZSBWb3hlbCBhbmFseXNpcw0KcGMuc2NhbGUgPC0gc2NhbGUocGMuZGYsIGNlbnRlcj1jKG1pbihwYy5kZlssMV0pLG1pbihwYy5kZlssMl0pLG1pbihwYy5kZlssM10pKSkgIyMgUmVzY2FsZSB0aGUgZGF0YSBzbyB0aGF0IGl0J3MgaW4gbWV0ZXJzIGFuZCBub3QgcHJvamVjdGlvbiB1bml0cyAoT1BUSU9OQUwgU1RFUCkNCnBjLnZveCA8LSB2b3gocGMuc2NhbGUscmVzPTAuMSkgIyMgRmluYWxseSBydW4gdGhlIHZveCBjb21tYW5kDQojIyByZXMgaXMgdGhlIHNpemUgb2YgdGhlIHZveGVsIGluIHVuaXRzIG9mIHRoZSBvcmlnaW5hbCBjb29yZGluYXRlIHN5c3RlbS4gU28gMC4xIGluIHRoaXMgY2FzZSBpcyBhIDEwY20gdm94ZWwNCnBjLnZveC41IDwtIHBjLnZveFtwYy52b3gkbmJwdHM+NSxdICAjIyBGaWx0ZXIgb3V0IHZveGVscyB3aXRoIGxlc3MgdGhhbiAyIHBvaW50cyAob3B0aW9uYWwgdG9vKQ0KDQoNCiMjIFBsb3QgdGhlIHZveGVsaXplZCBwb2ludCBjbG91ZCB1c2luZyBwbG90bHkNCiMjIHZveGVscyBhcmUgcmVwcmVzZW50ZWQgYXMgc3F1YXJlcyAoaXQgYWN0dWFsbHkgcGxvdHMgdGhlbSBhcyBwb2ludHMsIGJ1dCB3ZSBjYW4gcmVzaXplIHRoZSBzcXVhcmVzIHRvIGFwcHJveGltYXRlIHRoZSB2b3hlbHMpDQojIyBDb2xvciBvZiB0aGUgdm94ZWxzIGNvcnJlc3BvbmQgdG8gaG93IG1hbnkgcG9pbnRzIGZyb20gdGhlIGNsb3VkIGZlbGwgaW4gZWFjaCB2b3hlbA0KcCA8LSBwbG90X2x5KHBjLnZveC41LCB4PX5kYXRhLi4uMS4seT1+ZGF0YS4uLjIuLHo9fmRhdGEuLi4zLiwNCiAgICAgICAgICAgICBtYXJrZXI9bGlzdChzeW1ib2w9InNxdWFyZSIsY29sb3I9fm5icHRzLGNvbG9yc2NhbGU9IkJsdWVzIiwgc2hvd3NjYWxlID0gVFJVRSxzaXplPTUscmV2ZXJzZXNjYWxlPVQpKSAlPiUNCiAgYWRkX21hcmtlcnMoKSAlPiUNCiAgbGF5b3V0KHNjZW5lID0gbGlzdCh4YXhpcyA9IGxpc3QodGl0bGUgPSAnWCcpLA0KICAgICAgICAgICAgICAgICAgICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICdZJyksDQogICAgICAgICAgICAgICAgICAgICAgemF4aXMgPSBsaXN0KHRpdGxlID0gJ0hlaWdodCcpKSwNCiAgICAgICAgIGFubm90YXRpb25zID0gbGlzdCgNCiAgICAgICAgICAgeCA9IDEuMTUsDQogICAgICAgICAgIHkgPSAxLjA1LA0KICAgICAgICAgICB0ZXh0ID0gJ1BvaW50cy9Wb3hlbCcsDQogICAgICAgICAgIHhyZWYgPSAncGFwZXInLA0KICAgICAgICAgICB5cmVmID0gJ3BhcGVyJywNCiAgICAgICAgICAgc2hvd2Fycm93ID0gRkFMU0UNCiAgICAgICAgICkpDQpwDQpgYGANCg0K